﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace V82.ОбщиеМодули
{
	public partial class ФормированиеСпискаРаботниковПереопределяемый
	{
		// Функция формирует текст запроса если источником данных должен быть не регистр РаботникиОрганизации
		//
		// Возвращаемое значение:
		//   Текст запроса
		//

		public object ПолучитьТекстЗапросаНачальныеНастройкиДругиеРегистры(/*ОбработкаОбъект, СтруктураПредставлениеПолей, СтруктураФорматаПолей, СоответствиеНазначений, СтруктураДляОтбораПоКатегориям, ТаблицаПолей, СтрокаТаблицаПолей, ТекстПоляКатегорий, ТекстПоляСвойств*/)
		{
			//ТекстЗапроса = "";
			if(true/*ОбработкаОбъект.ВыбиратьСотрудника*/)
			{
				/*ТекстЗапроса =
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
		|	Сотрудники.Сотрудник КАК Сотрудник,
		|	Сотрудники.Сотрудник.Наименование КАК ФИО,
		|	РаботникиОрганизации.ФизЛицо КАК Физлицо,
		|	ВЫБОР
		|		КОГДА ПриказыОПриеме.Период > НАЧАЛОПЕРИОДА(&ДатаАктуальности, МЕСЯЦ)
		|			ТОГДА ПриказыОПриеме.Период
		|		ИНАЧЕ НАЧАЛОПЕРИОДА(&ДатаАктуальности, МЕСЯЦ)
		|	КОНЕЦ КАК ДатаНачала,
		|	ВЫБОР
		|		КОГДА ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ПриказыОбУвольнении.Период, ДЕНЬ),ДЕНЬ,-1) МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаАктуальности, МЕСЯЦ) И КОНЕЦПЕРИОДА(&ДатаАктуальности, МЕСЯЦ)
		|			ТОГДА ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ПриказыОбУвольнении.Период, ДЕНЬ),ДЕНЬ,-1)
		|		ИНАЧЕ КОНЕЦПЕРИОДА(&ДатаАктуальности, МЕСЯЦ)
		|	КОНЕЦ КАК ДатаОкончания,
		|	РаботникиОрганизации.ГрафикРаботы,
		|	РаботникиОрганизации.ЗанимаемыхСтавок,
		|	РаботникиОрганизации.Должность,
		|	РаботникиОрганизации.Подразделение КАК Подразделение
		|ПОМЕСТИТЬ ВТСписокРаботников
		|{ВЫБРАТЬ
		|	Сотрудник,
		|	ФИО,
		|	Физлицо,
		|	ДатаНачала,
		|	ДатаОкончания,
		|	ГрафикРаботы,
		|	ЗанимаемыхСтавок,
		|	Должность,
		|	Подразделение
		|}
		|ИЗ
		|	РегистрСведений.Работники.СрезПоследних(&ДатаАктуальности, ) КАК РаботникиОрганизации
		|		{ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
		|				МАКСИМУМ(Работники.Период) КАК Период,
		|				РегистрРаботники.ФизЛицо КАК Физлицо
		|			ИЗ
		|				РегистрСведений.Работники.СрезПоследних(&ДатаАктуальности, ) КАК РегистрРаботники
		|					ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Работники КАК Работники
		|					ПО РегистрРаботники.ФизЛицо = Работники.ФизЛицо
		|						И Работники.Период <= РегистрРаботники.Период
		|						И (Работники.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.ПриемНаРаботу))
		|			{ГДЕ
		|				РегистрРаботники.Должность КАК Должность,
		|				РегистрРаботники.ГрафикРаботы КАК ГрафикРаботы,
		|				РегистрРаботники.ЗанимаемыхСтавок КАК ЗанимаемыхСтавок,
		|				РегистрРаботники.Подразделение КАК Подразделение}
		|			
		|			СГРУППИРОВАТЬ ПО
		|				РегистрРаботники.ФизЛицо) КАК ПриказыОПриеме
		|		ПО ПриказыОПриеме.Физлицо = РаботникиОрганизации.ФизЛицо}
		|		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
		|			МАКСИМУМ(Работники.Период) КАК Период,
		|			РегистрРаботники.ФизЛицо КАК Физлицо
		|		ИЗ
		|			РегистрСведений.Работники.СрезПоследних(&ДатаАктуальности, ) КАК РегистрРаботники
		|				ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Работники КАК Работники
		|				ПО РегистрРаботники.ФизЛицо = Работники.ФизЛицо
		|					И (Работники.Период <= РегистрРаботники.Период)
		|					И (Работники.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение))
		|		{ГДЕ
		|			РегистрРаботники.Должность КАК Должность,
		|			РегистрРаботники.ГрафикРаботы КАК ГрафикРаботы,
		|			РегистрРаботники.ЗанимаемыхСтавок КАК ЗанимаемыхСтавок,
		|			РегистрРаботники.Подразделение КАК Подразделение}
		|		
		|		СГРУППИРОВАТЬ ПО
		|			РегистрРаботники.ФизЛицо) КАК ПриказыОбУвольнении
		|		ПО РаботникиОрганизации.ФизЛицо = ПриказыОбУвольнении.Физлицо
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
		|			СписокСотрудников.Сотрудник КАК Сотрудник,
		|			СписокСотрудников.Физлицо КАК Физлицо
		|		ИЗ
		|			(ВЫБРАТЬ
		|				МАКСИМУМ(РаботникиОсновноеМесто.Сотрудник) КАК Сотрудник,
		|				РаботникиОсновноеМесто.Сотрудник.Физлицо КАК Физлицо,
		|				1 КАК Приоритет
		|			ИЗ
		|				РегистрСведений.РаботникиОрганизаций.СрезПоследних(
		|					&ДатаАктуальности,
		|					Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)) КАК РаботникиОсновноеМесто
		|			ГДЕ
		|				ВЫБОР
		|					КОГДА РаботникиОсновноеМесто.ПериодЗавершения <= &ДатаАктуальности
		|						И РаботникиОсновноеМесто.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
		|					ТОГДА РаботникиОсновноеМесто.ПричинаИзмененияСостоянияЗавершения
		|					ИНАЧЕ РаботникиОсновноеМесто.ПричинаИзмененияСостояния 
		|				КОНЕЦ  <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
		|			
		|			СГРУППИРОВАТЬ ПО
		|				РаботникиОсновноеМесто.Сотрудник.Физлицо
		|			
		|			ОБЪЕДИНИТЬ
		|			
		|			ВЫБРАТЬ
		|				МАКСИМУМ(РаботникиСовместительство.Сотрудник),
		|				РаботникиСовместительство.Сотрудник.Физлицо,
		|				2
		|			ИЗ
		|				РегистрСведений.РаботникиОрганизаций.СрезПоследних(
		|					&ДатаАктуальности,
		|					Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.Совместительство)) КАК РаботникиСовместительство
		|			ГДЕ
		|				ВЫБОР
		|					КОГДА РаботникиСовместительство.ПериодЗавершения <= &ДатаАктуальности
		|						И РаботникиСовместительство.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
		|					ТОГДА РаботникиСовместительство.ПричинаИзмененияСостоянияЗавершения
		|					ИНАЧЕ РаботникиСовместительство.ПричинаИзмененияСостояния 
		|				КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
		|			
		|			СГРУППИРОВАТЬ ПО
		|				РаботникиСовместительство.Сотрудник.Физлицо
		|			
		|			ОБЪЕДИНИТЬ
		|			
		|			ВЫБРАТЬ
		|				МАКСИМУМ(СотрудникиДУ.Ссылка),
		|				СотрудникиДУ.Физлицо,
		|				ВЫБОР
		|					КОГДА СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ДоговорУправленческий)
		|						ТОГДА 3
		|					КОГДА СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор)
		|						ТОГДА 4
		|					ИНАЧЕ 5
		|				КОНЕЦ
		|			ИЗ
		|				Справочник.СотрудникиОрганизаций КАК СотрудникиДУ
		|			
		|			СГРУППИРОВАТЬ ПО
		|				СотрудникиДУ.Физлицо,
		|				ВЫБОР
		|					КОГДА СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ДоговорУправленческий)
		|						ТОГДА 3
		|					КОГДА СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор)
		|						ТОГДА 4
		|					ИНАЧЕ 5
		|				КОНЕЦ) КАК СписокСотрудников
		|				ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
		|					СписокФизическихЛиц.Физлицо КАК Физлицо,
		|					МИНИМУМ(СписокФизическихЛиц.Приоритет) КАК Приоритет
		|				ИЗ
		|					(ВЫБРАТЬ
		|						РаботникиОсновноеМесто.Сотрудник.Физлицо КАК Физлицо,
		|						1 КАК Приоритет
		|					ИЗ
		|						РегистрСведений.РаботникиОрганизаций.СрезПоследних(
		|							&ДатаАктуальности,
		|							Сотрудник.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор)
		|								И Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)) КАК РаботникиОсновноеМесто
		|					ГДЕ
		|						ВЫБОР
		|							КОГДА РаботникиОсновноеМесто.ПериодЗавершения <= &ДатаАктуальности
		|								И РаботникиОсновноеМесто.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
		|							ТОГДА РаботникиОсновноеМесто.ПричинаИзмененияСостоянияЗавершения
		|							ИНАЧЕ РаботникиОсновноеМесто.ПричинаИзмененияСостояния 
		|						КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
		|					
		|					ОБЪЕДИНИТЬ
		|					
		|					ВЫБРАТЬ
		|						РаботникиСовместительство.Сотрудник.Физлицо,
		|						2
		|					ИЗ
		|						РегистрСведений.РаботникиОрганизаций.СрезПоследних(
		|							&ДатаАктуальности,
		|							Сотрудник.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор)
		|								И Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.Совместительство)) КАК РаботникиСовместительство
		|					ГДЕ
		|						ВЫБОР
		|							КОГДА РаботникиСовместительство.ПериодЗавершения <= &ДатаАктуальности
		|								И РаботникиСовместительство.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
		|							ТОГДА РаботникиСовместительство.ПричинаИзмененияСостоянияЗавершения
		|							ИНАЧЕ РаботникиСовместительство.ПричинаИзмененияСостояния 
		|						КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
		|					
		|					ОБЪЕДИНИТЬ
		|					
		|					ВЫБРАТЬ
		|						СотрудникиДУ.Физлицо,
		|						ВЫБОР
		|							КОГДА СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ДоговорУправленческий)
		|								ТОГДА 3
		|							КОГДА СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор)
		|								ТОГДА 4
		|							ИНАЧЕ 5
		|						КОНЕЦ
		|					ИЗ
		|						Справочник.СотрудникиОрганизаций КАК СотрудникиДУ) КАК СписокФизическихЛиц
		|				
		|				СГРУППИРОВАТЬ ПО
		|					СписокФизическихЛиц.Физлицо) КАК СписокФизическихЛиц
		|				ПО СписокСотрудников.Физлицо = СписокФизическихЛиц.Физлицо
		|					И СписокСотрудников.Приоритет = СписокФизическихЛиц.Приоритет) КАК Сотрудники
		|		ПО РаботникиОрганизации.ФизЛицо = Сотрудники.Физлицо
		|		//ДАННЫЕ О ФИЗЛИЦЕ: СОЕДИНЕНИЯ
		|		//СОЕДИНЕНИЯ СВОЙСТВ И КАТЕГОРИЙ
		|//УСЛОВИЕ
		|{ГДЕ
		|	Сотрудники.Сотрудник КАК Работник,
		|	Сотрудники.Сотрудник.Родитель КАК Группа,
		|	РаботникиОрганизации.Должность.* КАК Должность,
		|	РаботникиОрганизации.ГрафикРаботы.* КАК ГрафикРаботы,
		|	РаботникиОрганизации.ЗанимаемыхСтавок КАК ЗанимаемыхСтавок,
		|	ПриказыОПриеме.Период КАК ДатаПриема,
		|	РаботникиОрганизации.Подразделение КАК Подразделение
		|	//ДАННЫЕ О ФИЗЛИЦЕ: ПОЛЯ
		|	//СВОЙСТВА
		|	//КАТЕГОРИИ
		|}
		|";*/
			}
			if(true/*Не ОбработкаОбъект.ВключатьУволенных*/)
			{
				/*СтрокаУсловия =
		"ГДЕ
		|	РаботникиОрганизации.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
		|";*/
				//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//УСЛОВИЕ", СтрокаУсловия);
			}
			/*// Преобразуем текст запроса для получения полной информации о физлице
*/
			//УправлениеОтчетами.ДобавитьВТекстПостроителяДанныеОФизлице(ТекстЗапроса, СтруктураПредставлениеПолей, СтруктураФорматаПолей, "РаботникиОрганизации", "Физлицо");
			if(true/*ОбработкаОбъект.ВыбиратьСотрудника*/)
			{
				/*// здесь добавим свойства сотрудника
*/
				//СтрокаТаблицаПолей.ПутьКДанным = "Сотрудники.Сотрудник";
				//СтрокаТаблицаПолей.Назначение = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_СотрудникиОрганизаций;
				//НоваяСтрока = ТаблицаПолей.Добавить();
				//НоваяСтрока.Представление = "физического лица";
			}
			/*// теперь добавим свойства физлица
*/
			//НоваяСтрока.ПутьКДанным = "РаботникиОрганизации.Физлицо";
			//НоваяСтрока.Назначение = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_ФизическиеЛица;
			/*// Добавим строки запроса, необходимые для использования свойств и категорий
*/
			//ТекстПоляКатегорий = "";
			//ТекстПоляСвойств = "";
			//УправлениеОтчетами.ДобавитьВТекстСвойстваИКатегории(ТаблицаПолей, ТекстЗапроса, СтруктураПредставлениеПолей, СоответствиеНазначений, ОбработкаОбъект.ПостроительОтчета.Параметры,,ТекстПоляКатегорий,ТекстПоляСвойств,,,,"//СОЕДИНЕНИЯ СВОЙСТВ И КАТЕГОРИЙ",, СтруктураДляОтбораПоКатегориям);
			return null;
		}
		//ПолучитьТекстЗапросаНачальныеНастройкиДругиеРегистры ()
	}
}
